package cn.slipi.common.utils.dozer;


import java.util.List;
import java.util.Set;

/**
 * @author litao
 */
public interface IGenerator {

    /**
     * 对象拷贝
     *
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return
     * @Description: 单个对象的深度复制及类型转换，vo/domain , po
     */
    <T, S> T convert(S s, Class<T> clz);

    /**
     * 对象拷贝
     *
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return
     * @Description: list深度复制
     */
    <T, S> List<T> convert(List<S> s, Class<T> clz);

    /**
     * 对象拷贝
     *
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return
     * @Description: set深度复制
     */
    <T, S> Set<T> convert(Set<S> s, Class<T> clz);

    /**
     * 对象拷贝
     *
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return
     * @Description: 数组深度复制
     */
    <T, S> T[] convert(S[] s, Class<T> clz);

    /**
     * 一个存在对象拷贝到另一个存在对象
     *
     * @param source
     * @param target
     */
    void convert(Object source, Object target);

    /**
     * 不拷贝NULL
     * @param sources
     * @param destination
     */
    void convertNotNull(Object sources, Object destination);

}